---
title: "JWT"
categories:
- rfc
tags:
---

<div id="content">
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org4974a91">JWT</a>
<ul>
<li><a href="#org9d4afc0">header</a></li>
<li><a href="#org3dc960b">playload 存放信息的地方，playload中的信息有三种：</a></li>
<li><a href="#orge026f71">Signature 签名</a></li>
</ul>
</li>
</ul>
</div>
</div>
<blockquote>
<p>
<a href="https://tools.ietf.org/html/rfc7519">https://tools.ietf.org/html/rfc7519</a>
</p>
</blockquote>
<div class="outline-2" id="outline-container-org4974a91">
<h2 id="org4974a91">JWT</h2>
<div class="outline-text-2" id="text-org4974a91">
<p>
JSON Web Tokens，一种开放标准（<a href="https://tools.ietf.org/html/rfc7519">rfc7519</a>）， 定义了一个使用JSON格式安全传递信息的方式。信息能够使用对称或非对称加密。
jwt token字符串包括三部分，三个部分之间以点号分隔：
</p>
</div>
<div class="outline-3" id="outline-container-org9d4afc0">
<h3 id="org9d4afc0">header</h3>
<div class="outline-text-3" id="text-org9d4afc0">
<div class="org-src-container">
<pre class="src src-json">{
  "alg": "HS256",
  "typ": "JWT"
}
</pre>
</div>
</div>
</div>
<div class="outline-3" id="outline-container-org3dc960b">
<h3 id="org3dc960b">playload 存放信息的地方，playload中的信息有三种：</h3>
<div class="outline-text-3" id="text-org3dc960b">
<ul class="org-ul">
<li>Registered claims 是一系列预定义的声明，不是强制的但是推荐。</li>
</ul>
<p>
例如：iss (issuer), exp (expiration time), sub (subject), aud (audience), <a href="https://tools.ietf.org/html/rfc7519#section-4.1">others</a>
</p>
<blockquote>
<p>
请注意，为了保持紧凑，这些字段的名字都是三个字符。
</p>
</blockquote>
<ul class="org-ul">
<li>Public claims 是自定义的一些声明。但是为了防止冲突，它们应该被定义在<a href="https://www.iana.org/assignments/jwt/jwt.xhtml">IANA JSON Web Token Registry</a>中，或者被定义为包含防碰撞命名空间的URI。</li>
<li>Private claims 自定义声明，用于共享信息</li>
</ul>
<p>
playload部分以Base64编码，构成jwt的第二部分。Base64编码就意味着能够被任何人反编码，因此不要将敏感信息明文存储在playload中。
</p>
</div>
</div>
<div class="outline-3" id="outline-container-orge026f71">
<h3 id="orge026f71">Signature 签名</h3>
<div class="outline-text-3" id="text-orge026f71">
<p>
使用header中指定的算法，对编码后的header，编码后的playload，加入一个密钥签名，例如，如果HMAC SHA256算法，则通过下面的方式创建签名：
</p>
<pre class="example">
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
</pre>
</div>
</div>
</div>
</div>
<div class="status" id="postamble">
<p class="author">Author: gdme1320</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
